package ThreadLocal;

import java.util.concurrent.TimeUnit;

/**
 * @功能
 * @创建时间 2019/12/20
 * ThreadLocal线程局部变量
 * Threadlocal使用空间换时间，synchronized用时间换空间
 * 比如在hibernate中session就存在与ThreadLocal中，避免synchronized的使用
 * 运行下面的程序，理解ThreadLocal
 */
public class ThreadLocal2 {
   //  volatile static Person p = new Person();
    static ThreadLocal<Person> t1 = new ThreadLocal<>(); // 自己的自己用，别人访问不到

    public static void main(String[] args) {
        new Thread(()->{
            try{
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(t1.get());
        }).start();

        new Thread(()->{
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            t1.set(new Person());
        }).start();
    }
static class Person{
        String name ="zhangsan";
}
}
